﻿using System.IO;
using uTILLIty.ADExtractor.Core.Exporters.Sql;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using uTILLIty.ADExtractor.Core;
using System.DirectoryServices;
using uTILLIty.ADExtractor.Core.Extensions;

namespace uTILLIty.ADExtractor.CoreTests
{

	/// <summary>
	///This is a test class for SqlExporterTest and is intended
	///to contain all SqlExporterTest Unit Tests
	///</summary>
	[TestClass]
	public class SqlExporterTest
	{
		/// <summary>
		///Gets or sets the test context which provides
		///information about and functionality for the current test run.
		///</summary>
		public TestContext TestContext { get; set; }

		#region Additional test attributes
		// 
		//You can use the following additional attributes as you write your tests:
		//
		//Use ClassInitialize to run code before running the first test in the class
		//[ClassInitialize()]
		//public static void MyClassInitialize(TestContext testContext)
		//{
		//}
		//
		//Use ClassCleanup to run code after all tests in a class have run
		//[ClassCleanup()]
		//public static void MyClassCleanup()
		//{
		//}
		//
		//Use TestInitialize to run code before running each test
		//[TestInitialize()]
		//public void MyTestInitialize()
		//{
		//}
		//
		//Use TestCleanup to run code after each test has run
		//[TestCleanup()]
		//public void MyTestCleanup()
		//{
		//}
		//
		#endregion

		/// <summary>
		///A test for Export
		///</summary>
		[TestMethod, DeploymentItem("Samples\\DbExportSample1.xml", "Samples")]
		public void ExportTest()
		{
			var target = new SqlExporter();
			target.LogMessage += (o, e) => TestContext.WriteLine(e.Message);

			var extractor = new ActiveDirectoryExtractor();
			var query = new QueryInformation
										{
											Query = "(&(objectClass=Group)(cn=Domain*))",
											PropertiesToLoad = new[] { AdPropertyInfo.Parse("Name=cn"), AdPropertyInfo.Parse("sid:objectSID") },
										};
			SearchResultCollection result = extractor.QueryActiveDirectory(query);

			SqlExporterConfiguration configuration;
			using (var file = File.OpenRead(@"Samples\\DbExportSample1.xml"))
			{
				configuration = ObjectExtensions.Load<SqlExporterConfiguration>(file, null);
			}
			target.Export(query, result, configuration);
		}
	}
}
